package gestordeentidades.persistance.interfaces;

import gestordeentidades.persistance.database.ParametroSql;
import gestordeentidades.persistance.database.SQLtype;

/**
 * Trabalho DAS - 2014/2015
 * Comando sql, que pode ou não possuir ParametroSql
 * @author a21210380, a21190325, a21210392
 */
public interface IDataBaseStatement extends Iterable<ParametroSql>{

    /**
     * Inidicar qual é o sql a ser utilizado
     * Os parametros devem ser definidos por ? e acrescentados usando o adicionarParametroSql(...)
     * Exemplo: INSERT INTO carro VALUES (?,?,?,?,?);
     * @param sql
     * @return
     */
    public IDataBaseStatement setSql(String sql);

    /**
     * Devolve o sql a ser utilizado por este IDataBaseStatement
     * @return
     */
    public String getSql();

    /**
     * Addicionar parametro sql
     * Nota: que o indice dos parametros começa em 1
     * Exemplo: INSERT INTO carro VALUES (?,?,?,?,?); //(1,2,3,4,5)
     * @param index indice do parametro,  começa em 1 
     * @param object objecto a guardar
     * @param targetSqlType tipo do objecto na base de dados
     * @return IDataBaseStatement para fazer chain
     */
    public IDataBaseStatement adicionarParametroSql(int index, Object object, SQLtype targetSqlType);
}
